/**
 * @Author: Jiang Zhongxun
 * @Date: 2024-10-04 12:30:00
 * @FilePath: /Socket/practiceProject/include/db/dbOperation.h
 * @Description: SQLite3数据库操作相关定义
 */
#ifndef _DBOPERATION_H_
#define _DBOPERATION_H_

#include "./dbDefinition.h"
#include <arpa/inet.h>
#include <errno.h>
#include <fcntl.h>
#include <netinet/in.h>
#include <sqlite3.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/un.h>
#include <sys/wait.h>
#include <unistd.h>

/**
 * 通用的SQL增删改操作接口
 *
 * @param db SQLite3数据库指针
 * @param sql 要执行的SQL语句
 * @param errmsg 输出参数，用于存储错误信息
 * @param operationName 操作名称，用于在错误信息和成功信息中标识操作，如："userInfo"、"logInfo"、"checkInfo"
 * @return 返回0表示成功，非零表示失败
 */
int execOperate(sqlite3 *db, const char *sql, char **errmsg, const char *operationName);

/**
 * 通用的SQL条件查询接口
 * 通用的SQL全部查询接口
 * 通用的SQL分页查询接口
 *
 * @param db SQLite3数据库指针
 * @param sql 要执行的SQL语句
 * @param result 指向二维字符串数组的指针。执行成功后，*result 将包含查询结果。每一行数据都是一个字符串数组，每个字符串代表一列的值
 * @param row 指向整数的指针，用于返回结果集中行的数量
 * @param column 指向整数的指针，用于返回结果集中列的数量
 * @param errmsg 输出参数，用于存储错误信息
 * @param operationName 操作名称，用于在错误信息和成功信息中标识操作，如："userInfo"、"logInfo"、"checkInfo"
 * @return *result 成功返回查询的结果集*result，失败返回NULL
 */
char **conditionQuery(sqlite3 *db, const char *sql, char ***result, int *row, int *column, char **errmsg, const char *operationName);

#endif
